package org.example.common.enums;

import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 统一管理文件的元数据（策略模式的应用）
 *避免硬编码（如判断文件类型时写死 ".csv" 或 "text/csv"），统一维护文件类型信息。
 * 提供 getByMimeType 方法，方便根据上传文件的 Content-Type 快速确定文件类型。
 *1
 * 策略模式是一种行为型设计模式，它的核心思想是：
 * “定义一系列算法（或逻辑），将每个算法封装起来，使它们可以互相替换，且算法的变化不会影响使用算法的客户端。”
 * 策略模式的核心角色：
 * 策略接口（Strategy）：定义所有算法的统一接口（如 FileParser）。
 * 具体策略（Concrete Strategy）：实现策略接口的具体算法（如 CsvParser、ExcelParser）。
 * 环境类（Context）：持有策略接口的引用，根据场景选择具体策略执行（如 “文件解析管理器”）。
 */
public enum FileType {
    //定义支持的文件类型    #像这种他有自己隐式的构造方法，可以直接写对应的值
    CSV("text/csv", ".csv"),
    EXCEL_XLS("application/vnd.ms-excel", ".xls"),
    EXCEL_XLSX("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", ".xlsx");


    // MIME类型（用于HTTP传输时标识文件类型，如上传文件时的Content-Type
    private final String mimeType;
    // 文件后缀（如.csv、.xlsx）
    private final String suffix;

    // 构造方法：初始化MIME类型和后缀
    FileType(String mimeType, String suffix) {
        this.mimeType = mimeType;
        this.suffix = suffix;
    }

    // 根据MIME类型获取FileType
    // 工具方法：根据MIME类型获取对应的FileType枚举（用于判断文件类型）
    //枚举类提供一个方法 values（）可以遍历所有
    public static FileType getByMimeType(String mimeType) {
        for (FileType type : values()) {
            if (type.mimeType.equals(mimeType)) {
                return type;
            }
        }
        return null;
    }
}

